package com.lib.common.repository.common

import android.annotation.SuppressLint
import com.lib.framework.helper.SharedPreferencesHelper
import com.lib.framework.manager.ContextManager

/**
 * Copyright (C), 2020-2020, 享物说
 * FileName: ComSharePreHelper
 * Author: keanbin
 * Date: 2020-02-05 16:33
 * Description: 公共的 SharedPreferences 辅助类
 * History:
 * <author> <time> <version> <desc>
 * 作者姓名 修改时间 版本号 描述
 */
class ComSharePreHelper {

    companion object {

        /**
         * 公共的 sp 的文件名
         */
        private const val SP_FILENAME = "common_sp"

        /**
         * 公共的 sp 的 SharedPreferencesHelper
         */
        @SuppressLint("StaticFieldLeak")
        private var sDefaultSharedPreferencesHelper: SharedPreferencesHelper? = null


        /**
         * 获取公共 sp 的 SharedPreferencesHelper
         */
        fun getDefaultSharedPreferencesHelper(): SharedPreferencesHelper {
            sDefaultSharedPreferencesHelper?.let {
                return it
            }

            val defaultSharedPreferencesHelper = SharedPreferencesHelper(ContextManager.applicationContext,
                SP_FILENAME
            )
            sDefaultSharedPreferencesHelper = defaultSharedPreferencesHelper
            return defaultSharedPreferencesHelper
        }


        /**
         * 存储
         */
        fun putString(key: String, value: String) {
            getDefaultSharedPreferencesHelper()
                .putString(key, value)
        }

        /**
         * 存储
         */
        fun putLong(key: String, value: Long) {
            getDefaultSharedPreferencesHelper()
                .putLong(key, value)
        }

        /**
         * 存储
         */
        fun putInt(key: String, value: Int) {
            getDefaultSharedPreferencesHelper()
                .putInt(key, value)
        }

        /**
         * 存储
         */
        fun putBoolean(key: String, value: Boolean) {
            getDefaultSharedPreferencesHelper()
                .putBoolean(key, value)
        }

        /**
         * 存储
         */
        fun putFloat(key: String, value: Float) {
            getDefaultSharedPreferencesHelper()
                .putFloat(key, value)
        }

        /**
         * 获取保存的数据
         */
        fun getString(key: String, defaultValue: String): String {
            return getDefaultSharedPreferencesHelper()
                .getString(key, defaultValue)
        }

        /**
         * 获取保存的数据
         */
        fun getInt(key: String, defaultValue: Int): Int {
            return getDefaultSharedPreferencesHelper()
                .getInt(key, defaultValue)
        }

        /**
         * 获取保存的数据
         */
        fun getBoolean(key: String, defaultValue: Boolean): Boolean {
            return getDefaultSharedPreferencesHelper()
                .getBoolean(key, defaultValue)
        }

        /**
         * 获取保存的数据
         */
        fun getFloat(key: String, defaultValue: Float): Float {
            return getDefaultSharedPreferencesHelper()
                .getFloat(key, defaultValue)
        }

        /**
         * 获取保存的数据
         */
        fun getLong(key: String, defaultValue: Long): Long {
            return getDefaultSharedPreferencesHelper()
                .getLong(key, defaultValue)
        }

        /**
         * 移除某个key值已经对应的值
         */
        fun remove(key: String) {
            getDefaultSharedPreferencesHelper()
                .remove(key)
        }

        /**
         * 清除所有数据
         */
        fun clear() {
            getDefaultSharedPreferencesHelper()
                .clear()
        }

        /**
         * 查询某个key是否存在
         */
        fun contain(key: String): Boolean? {
            return getDefaultSharedPreferencesHelper()
                .contain(key)
        }

        /**
         * 返回所有的键值对
         */
        fun getAll(): Map<String, *> {
            return getDefaultSharedPreferencesHelper()
                .getAll()
        }
    }
}